/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
        ListNode *p1=pHead1,*p2=pHead2;
        while(p1!=p2){//双指针法
            p1=p1?p1->next:pHead2;//遍历完在往后接的步骤是为了使两个链表长度相等，方便使用双指针法
            p2=p2?p2->next:pHead1;//往后接和在前面接其实是一样的  顺序问题罢了  方便理解可以看成是在前面接
        }
        return p1;//美中不足要是没有公共结点会死循环
    }
};